package com.itbbs.encrypt;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.beans.factory.annotation.Value;

import java.util.Calendar;
import java.util.Map;

/**
 * @author ysk
 * @version 1.0.1
 * @Description jwt的工具类
 * @createTime 2021年06月20日 23:03:00
 */
public class JWTHelper {

    // 读取配置文件中的密钥
    @Value("${jwt.key}")
    private static String key;

    /**
     * 创建token
     *
     * @param map 封装了jwt的有效载荷
     * @return 生成的token
     */
    public static String getToken(Map<String,String> map){
        JWTCreator.Builder builder = JWT.create();
        // 设置jwt的payload
        map.forEach((k,v) ->{
            builder.withClaim(k,v);
        });
        // 设置过期的时间
        Calendar instance = Calendar.getInstance();
        // 设置7天过期
        instance.add(Calendar.DATE,7);
        String token = builder.withExpiresAt(instance.getTime()).sign(Algorithm.HMAC256(key));
        return token;
    }

    /**
     * 验证token是否正确
     *
     * @param token token
     * @return DecodedJWT对象
     */
    public static DecodedJWT verify(String token){
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(key)).build();
        DecodedJWT verify = jwtVerifier.verify(token);
        return verify;
    }

}
